package ongd.web;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import ongd.negocio.gestion.ControladorVoluntario;
import ongd.negocio.gestion.Persona;
import ongd.servicios.persistencia.exceptions.PreexistingEntityException;
import org.primefaces.context.RequestContext;

/**
 * Clase que se encargará de insertar un voluntario.
 *
 * @author <a href="mailto:egi0002@alu.ubu.es">Elena García Iglesias</a>
 * @author <a href="mailto:cms0021@alu.ubu.es">Cristina Martínez Sanz</a>
 * @version 1.0 20120124
 *
 */
@ManagedBean
@ViewScoped
public class Insertar_Voluntario extends ABean {

    /**
     * Objeto de tipo persona que servirá para guardar el nuevo voluntario
     * que vamos a crear.
     */
    private Persona voluntario;
    /**
     * Objeto de tipo ControladorVoluntario que nos servirá para realizar las
     * operaciones necesarias para crear el voluntario.
     */
    private ControladorVoluntario contVoluntario;
    /**
     * Objeto de tipo String que va a contener el título de la página donde
     * estemos.
     */
    private String titulo;

    /**
     * Constructor de la clase.
     */
    public Insertar_Voluntario() {
        SesionBean sesion = getSesionBean();
        if (sesion.iniciadaSesion()) {
            titulo = "Insertar - Nuevo Voluntario";
            voluntario = new Persona();
            voluntario.setTipo("V");
            contVoluntario = sesion.getControladorVoluntario();
        }
    }

    /**
     * Método abstracto que se encargará de cargar los parámetros iniciales.
     */
    @Override
    public void cargaInicial() {
    }

    /**
     * Método que creará un voluntario.
     * @return null
     */
    public String aceptar() {
        if (getSesionBean().iniciadaSesion()) {
            RequestContext requestContext = RequestContext.getCurrentInstance();
            try {
                if (contVoluntario.crearVoluntario(voluntario)) {
                    requestContext.addCallbackParam("insertOK", true);
                    voluntario = new Persona();
                    voluntario.setTipo("V");
                } else {
                    requestContext.addCallbackParam("noCreado", true);
                }
            } catch (PreexistingEntityException ex) {
                requestContext.addCallbackParam("existe", true);
                Logger.getLogger(Insertar_Voluntario.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(Insertar_Voluntario.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return null;
    }

    /**
     * Método que devuelve el valor de la variable contVoluntario.
     * @return contVoluntario
     * @see #setContVoluntario
     */
    public ControladorVoluntario getContVoluntario() {
        return contVoluntario;
    }

    /**
     * Método que establece el valor de la variable contVoluntario.
     * @param contVoluntario Nuevo valor de la variable
     * @see #getContVoluntario
     */
    public void setContVoluntario(ControladorVoluntario contVoluntario) {
        this.contVoluntario = contVoluntario;
    }

    /**
     * Método que devuelve el valor de la variable voluntario.
     * @return voluntario
     * @see #setVoluntario
     */
    public Persona getVoluntario() {
        return voluntario;
    }

    /**
     * Método que establece el valor de la variable voluntario.
     * @param voluntario Nuevo valor de la variable
     * @see #getVoluntario
     */
    public void setVoluntario(Persona voluntario) {
        this.voluntario = voluntario;
    }

    /**
     * Método que devuelve el valor de la variable titulo.
     * @return titulo
     * @see #setTitulo
     */
    public String getTitulo() {
        return titulo;
    }

    /**
     * Método que establece el valor de la variable título.
     * @param titulo Nuevo valor de la variable
     * @see #getTitulo
     */
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
}
